/**
 * 全面的时间格式化函数
 * @param {string|number|Date} time 时间
 * @returns {string} 格式化后的时间字符串
 */
export function formatDetailTime(time) {
  if (!time) return '';
  
  const date = new Date(time);
  const now = new Date();
  
  // 获取时间组件
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const hours = date.getHours().toString().padStart(2, '0');
  const minutes = date.getMinutes().toString().padStart(2, '0');
  
  // 当前年份
  const currentYear = now.getFullYear();
  
  // 计算日期差
  const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
  const yesterdayStart = todayStart - 86400000; // 昨天
  const beforeYesterdayStart = yesterdayStart - 86400000; // 前天
  const dateTime = date.getTime();
  
  // 根据不同情况返回不同格式
  if (dateTime >= todayStart) {
    // 今天发布的
    return `今天 ${hours}:${minutes}`;
  } else if (dateTime >= yesterdayStart) {
    // 昨天发布的
    return `昨天 ${hours}:${minutes}`;
  } else if (dateTime >= beforeYesterdayStart) {
    // 前天发布的
    return `前天 ${hours}:${minutes}`;
  } else if (year === currentYear) {
    // 今年其他日期发布的
    return `${month}月${day}日 ${hours}:${minutes}`;
  } else {
    // 往年发布的
    return `${year}年${month}月${day}日 ${hours}:${minutes}`;
  }
}

/**
 * 组合格式化时间，同时显示相对时间和详细时间
 * @param {string|number|Date} time 时间
 * @returns {string} 格式化后的时间字符串
 */
export function formatCombinedTime(time) {
  if (!time) return '';
  
  const date = new Date(time);
  const now = new Date();
  
  // 计算时间差（毫秒）
  const diff = now.getTime() - date.getTime();
  
  // 相对时间部分
  let relativeTime;
  if (diff < 60000) { // 小于1分钟
    relativeTime = '刚刚';
  } else if (diff < 3600000) { // 小于1小时
    relativeTime = `${Math.floor(diff / 60000)}分钟前`;
  } else if (diff < 86400000) { // 小于1天
    relativeTime = `${Math.floor(diff / 3600000)}小时前`;
  } else if (diff < 604800000) { // 小于7天
    relativeTime = `${Math.floor(diff / 86400000)}天前`;
  } else {
    relativeTime = `${Math.floor(diff / 604800000)}周前`;
  }
  
  // 详细时间部分
  const detailTime = formatDetailTime(time);
  
  // 组合返回
  return `${relativeTime} · ${detailTime}`;
}
/**
 * 格式化时间
 * @param {string|number|Date} time 时间
 * @returns {string} 格式化后的时间
 */
export function formatTime(time) {
  const date = new Date(time)
  const now = new Date()
  const diff = (now - date) / 1000 // 转换为秒

  if (diff < 60) {
    return '刚刚'
  } else if (diff < 3600) {
    return Math.floor(diff / 60) + '分钟前'
  } else if (diff < 86400) {
    return Math.floor(diff / 3600) + '小时前'
  } else if (diff < 2592000) {
    return Math.floor(diff / 86400) + '天前'
  } else if (diff < 31536000) {
    return Math.floor(diff / 2592000) + '个月前'
  } else {
    return formatDate(date)
  }
}

/**
 * 格式化日期
 * @param {Date} date 日期对象
 * @returns {string} 格式化后的日期字符串 YYYY-MM-DD
 */
function formatDate(date) {
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  return `${year}-${month}-${day}`
}

/**
 * 获取相对时间
 * @param {string|number|Date} time 时间
 * @returns {string} 相对时间描述
 */
export function getRelativeTime(time) {
  const date = new Date(time)
  const now = new Date()
  const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())
  const yesterday = new Date(today - 86400000)
  const thisYear = new Date(now.getFullYear(), 0, 1)

  if (date >= today) {
    return formatTime(time)
  } else if (date >= yesterday) {
    return '昨天'
  } else if (date >= thisYear) {
    return formatMonthDay(date)
  } else {
    return formatDate(date)
  }
}

/**
 * 格式化月日
 * @param {Date} date 日期对象
 * @returns {string} MM-DD 格式的日期
 */
function formatMonthDay(date) {
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  return `${month}-${day}`
} 